package cn.iocoder.yudao.module.diy.service.config;

import javax.validation.*;

import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.iocoder.yudao.module.diy.controller.admin.config.vo.*;
import cn.iocoder.yudao.module.diy.dal.dataobject.config.DiyConfigDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.diy.pojo.LoginConfigVo;
import cn.iocoder.yudao.module.diy.pojo.SysConfigMapParam;
import cn.iocoder.yudao.module.diy.pojo.SysMapVo;

/**
 * 装修配置 Service 接口
 *
 * @author 芋道源码
 */
public interface DiyConfigService {

    /**
     * 创建装修配置
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createConfig(@Valid ConfigSaveReqVO createReqVO);

    /**
     * 更新装修配置
     *
     * @param updateReqVO 更新信息
     */
    void updateConfig(@Valid ConfigSaveReqVO updateReqVO);

    /**
     * 删除装修配置
     *
     * @param id 编号
     */
    void deleteConfig(Long id);

    /**
     * 获得装修配置
     *
     * @param id 编号
     * @return 装修配置
     */
    DiyConfigDO getConfig(Long id);

    /**
     * 获得装修配置分页
     *
     * @param pageReqVO 分页查询
     * @return 装修配置分页
     */
    PageResult<DiyConfigDO> getConfigPage(ConfigPageReqVO pageReqVO);


    /**获取配置项
     *
             * @param tenantId 站点id
     * @param key    关键字
     * @return
             */
    DiyConfigDO getConfig(Long tenantId, String key);

    /**
     * 获取系统配置项 返回values
     *
     * @param key
     * @param key
     * @return
     */
    JSONObject getConfigValue(String key);

    /**
     * 获取JSONARRY
     * @param key
     * @return
     */
    JSONArray getConfigArrayValue(String key);

    /**
     * 修改系统配置项
     *
     * @param key
     * @param key
     * @param valueJson
     */
    void setConfig(Long tenantId,Long addonId,Long siteId,String key, JSON valueJson);
    SysMapVo map(SysConfigMapParam param);
    /**
     * 获取注册与登录设置
     * @return
     */
    LoginConfigVo getLoginConfig(Long tenantId);

}